﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Autofac;
using ComputerVision.Common;
using ComputerVision.Data;
using ComputerVision.Services;
using RawInput_dll;

namespace ComputerVision.VeXeForm
{
    public partial class frmKiemTaThe : Form
    {
        private IService<VeXe> _veXe;
        private DataTable dt = new DataTable();
        private string _computerName;
        private DataRow dr;

        private IService<VeXe> _veXeService;
        public frmKiemTaThe()
        {
            InitializeComponent();
            _veXe = Program.Container.Resolve<IService<VeXe>>();

            _veXeService = Program.Container.Resolve<IService<VeXe>>();
            dt.Columns.Add("SoVe", typeof(string));
            dt.Columns.Add("Status", typeof(string));
            dt.Columns.Add("LoaiVe", typeof(string));
            LoadData();

            dgvSoVe.Rows[1].Selected = true;
        }

        private void LoadData()
        {
            Cursor.Current = Cursors.WaitCursor;
            dt.Clear();
            dgvSoVe.DataSource = dt;
            _veXeService = Program.Container.Resolve<IService<VeXe>>();
            var items = _veXeService.ToList().Select(p => new { p.SoVe, p.Status, LoaiVe = p.LoaiVe.TenLoai }).ToList();
            foreach (var item in items)
            {
                dr = dt.NewRow();
                dr["SoVe"] = item.SoVe;
                dr["Status"] = item.Status;
                dr["LoaiVe"] = item.LoaiVe;
                dt.Rows.Add(dr);
            }
            dgvSoVe.DataSource = dt;
            Cursor.Current = Cursors.Default;
        }
        
        private void btBaoHong_Click(object sender, EventArgs e)
        {
            BaoHongThe();
        }

        private void btBaoMat_Click(object sender, EventArgs e)
        {
            BaoMatThe();
        }

        private void báoMấtThẻToolStripMenuItem_Click(object sender, EventArgs e)
        {
            BaoMatThe();
        }

        private void báoHỏngThẻToolStripMenuItem_Click(object sender, EventArgs e)
        {
            BaoHongThe();
        }

        private void BaoMatThe()
        {
            if (dgvSoVe.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Bạn có chắc chắn muốn báo mất thẻ này. Sau khi báo thẻ này sẽ chuyển trạng thái về \"Mất thẻ\"", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    var selectedRow = dgvSoVe.SelectedRows[0];
                    var soVe = selectedRow.Cells[0].Value.ToString().Trim();
                    var item = _veXe.Detail(soVe);
                    if (item != null)
                    {
                        item.LoaiVeId = item.LoaiVeId;
                        item.Status = Constants.StatusVeXe.MatVe;
                        item.Modified = DateTime.Now;
                        item.ModifiedBy = Constants.CurrentUser;
                        _veXe.Update(item);
                        dgvSoVe.Rows.RemoveAt(selectedRow.Index);

                        //AlertList.Information(string.Format("Chuyển trạng thái thẻ {0} thành công.", soVe));
                    }
                    else
                    {
                        AlertList.Error("Số thẻ này không tồn tại trong bảng Vé xe");
                    }
                }

            }
            else
            {
                AlertList.Error("Chưa chọn dòng dữ liệu");
            }
        }

        private void BaoHongThe()
        {
            if (dgvSoVe.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Bạn có chắc chắn muốn báo sự cố thẻ này. Sau khi báo vé này sẽ chuyển trạng thái về \"Không Hoạt Động \"", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    var selectedRow = dgvSoVe.SelectedRows[0];
                    var soVe = selectedRow.Cells[0].Value.ToString().Trim();
                    var item = _veXe.Detail(soVe);
                    if (item != null)
                    {
                        item.LoaiVeId = item.LoaiVeId;
                        item.Status = Constants.StatusVeXe.InActive;
                        item.Modified = DateTime.Now;
                        item.ModifiedBy = Constants.CurrentUser;
                        _veXe.Update(item);
                        dgvSoVe.Rows.RemoveAt(selectedRow.Index);
                        //AlertList.Information(string.Format("Chuyển trạng thái thẻ {0} thành công.", soVe));
                    }
                    else
                    {
                        AlertList.Error("Số thẻ này không tồn tại trong bảng Vé xe");
                    }
                }

            }
            else
            {
                AlertList.Error("Chưa chọn dòng dữ liệu");
            }
        }

        private void frmKiemTaThe_Load(object sender, EventArgs e)
        {
        }

        private void btQuet_Click(object sender, EventArgs e)
        {
            var frm = new frmCheck(this);
            frm.ShowDialog();
        }

        private void btReload_Click(object sender, EventArgs e)
        {
            LoadData();
        }

    }
}
